package com.orangelife.service.property;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import com.orangelife.exception.AppBizException;
import com.orangelife.service.property.model.UserBean;
import com.orangelife.webservice.service.property.entity.PropComputeBean;
import com.orangelife.webservice.service.property.entity.PropNoticeBean;

/*****************************************************************
 * Copyright(C) ORANGELIFE Corporation 2015. All Rights Reserved.
 *****************************************************************/
/*
 * ============================================================== 功能名
 * PropCollection类的 service层的增删改查
 * 
 * @author @author zhr
 * 
 * @version 1.1.0
 * 
 * @date 2016-01-30 12:52:51
 * ==============================================================
 */
public interface PropCollectionService {

	/**
	 * 首次
	 * @param propNoticeBean
	 * @param userbean
	 * @return
	 * @throws AppBizException
	 * @throws ParseException
	 */
	public int saveOneshareRecord(PropNoticeBean propNoticeBean, UserBean userbean)
			throws AppBizException, ParseException;


	/**
	 * 缴费类型：查询
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> feeDetail(String isPre, String commID,
			String apartmentID, String FeeTypeID, String ts_start,
			String ts_end, String orderbytype) throws AppBizException;

	//
	//
	// /**
	// * 缴费类型：查询
	// * @author zxh
	// * @date 2016年3月7日
	// * @param servletRequest
	// * @param commID
	// * @param apartmentID
	// * @return
	// * @throws Exception
	// */
	// public List<Map<String,Object>> feeDetails(Map<String,Object>param)
	// throws AppBizException;

	/**
	 * 获取缴费类目
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> FeeType(String commID, String apartmentID)
			throws AppBizException;

	/**
	 * 计算预缴费用
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> feecompute(PropComputeBean propComputeBean)
			throws AppBizException, ParseException;

	/**
	 * 确认收款信息 生成缴费帐单（保存发票单号）
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> PayBill(PropComputeBean propComputeBean,
			UserBean userbean) throws AppBizException, ParseException;

	/**
	 * 缴费单统计查询
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> getpaybilltj(Map<String, Object> map)
			throws AppBizException, ParseException;

	/**
	 * 缴费单查询
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getpaybill(Map<String, Object> map)
			throws AppBizException, ParseException;

	/**
	 * 缴费单明细
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getpaybillitem(String paybillID)
			throws AppBizException, ParseException;

	// updatepaybill
	/**
	 * 修改发票单
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int updatepaybill(PropComputeBean propComputeBean, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 删除缴费账单
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int deletepaybill(String paybillID, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 生成打印计划
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public String procprintplan(PropNoticeBean propNoticeBean,
			UserBean userbean, String planid) throws AppBizException,
			ParseException, Exception, IOException;

	/**
	 * 生成打印计划
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public String procprintplanNew(PropNoticeBean propNoticeBean,
			UserBean userbean, String planid,String pmID) throws AppBizException,
			ParseException, Exception, IOException;

	/**
	 * 终止打印计划
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int cutplan(String planid, String planstatus)
			throws AppBizException, ParseException;

	/**
	 * 查询打印计划
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getprintplan(String commID,
			String planType, String pageIndex, String pageSize)
			throws AppBizException, ParseException;

	/**
	 * 创建一条进行中的计划
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public String createplan(PropNoticeBean propNoticeBean, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 保存备注
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int savedic(PropNoticeBean propNoticeBean, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 修改备注
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int updatedic(PropNoticeBean propNoticeBean, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 获取备注
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getdic(String commID, String code)
			throws AppBizException, ParseException;

	/**
	 * 查询公摊读数
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> queryshareRecord(Map<String, Object> map)
			throws AppBizException, ParseException;

	/**
	 * 保存读数
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public int saveshareRecord(PropNoticeBean propNoticeBean, UserBean userbean)
			throws AppBizException, ParseException;

	/**
	 * 查询住户读数
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> queryapartmentRecord(
			Map<String, Object> map, String pageIndex, String pageSize)
			throws AppBizException, ParseException;

	public List<Map<String, Object>> queryapartmentRecords(
			Map<String, Object> map, String pageIndex, String pageSize)
			throws AppBizException, ParseException;

	/**
	 * 查询住户读数总和
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> queryapartmentRecordsum(Map<String, Object> map)
			throws AppBizException, ParseException;

	/**
	 * 下载模板
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> downmodle(Map<String, Object> map)
			throws AppBizException, ParseException;

	/**
	 * 模板导入
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> uploadFileList(List<Attachment> attachments,
			HttpServletRequest request, UserBean userbean)
			throws AppBizException, ParseException, IOException,
			InvalidFormatException;

	/**
	 * 查询表类型
	 * 
	 * @author zxh
	 * @date 2016年3月7日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> querymetertype(String commID)
			throws AppBizException, ParseException;

	/**
	 * 确认收款信息 生成缴费帐单（保存发票单号）（新）
	 * 
	 * @author rh
	 * @date 2016年4月27日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> PayBillNew(PropComputeBean propComputeBean,
			UserBean userbean) throws AppBizException, Exception;

	public void confirmCollection(String paybillId);

	public List<Map<String, Object>> getCollectionInfoByUserId(String userId);

	public List<Map<String, Object>> getPayBillInfoGroupForApp(
			String apartmentid, String isPre);



	public List<Map<String, Object>> getHistoryPayBillInfoForApp(
			String feeDetailId);

	public List<Map<String, Object>> getHistoryInfoListForApp(String userID,
			String apartmentId, String paybillId);

	/**
	 * 查询历史计入
	 * 
	 */
	public List<Map<String, Object>> queryshareRecords(Map<String, Object> map)
			throws AppBizException;

	public Map<String, Object> queryapartmentRecordsums(Map<String, Object> map)
			throws AppBizException;
}
